import pysam
import argparse

def get_reads_at_position(bam_file, chromosome, position):
    # 打开 BAM 文件
    bam = pysam.AlignmentFile(bam_file, "rb")

    # 使用 fetch 获取覆盖指定染色体和位置的 reads
    reads = bam.fetch(chromosome, position - 1, position)  # position - 1 是因为 BAM 中的坐标是 0-based

    read_ids = []

    # 遍历 reads 并收集 id
    for read in reads:
        if not read.is_unmapped:  # 确保读取是已对齐的
            read_ids.append(read.query_name)

    bam.close()
    return read_ids

def main():
    # 设置命令行参数解析器
    parser = argparse.ArgumentParser(description="从 BAM 文件中获取覆盖指定染色体位置的读取 IDs")
    
    # 添加参数
    parser.add_argument("bam_file", help="输入 BAM 文件路径")
    parser.add_argument("chromosome", help="目标染色体，例如 'chr1'")
    parser.add_argument("position", type=int, help="目标坐标位置，1-based")

    # 解析参数
    args = parser.parse_args()

    # 调用函数获取覆盖该点的 read IDs
    reads_at_position = get_reads_at_position(args.bam_file, args.chromosome, args.position)

    # 输出结果
    print("覆盖该位置的read IDs:", reads_at_position)

if __name__ == "__main__":
    main()
